import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";
import legacy from "@vitejs/plugin-legacy";
import VueSetupExtend from "vite-plugin-vue-setup-extend";
import vueJsx from "@vitejs/plugin-vue-jsx";

//  自动按需引入
import AutoImport from "unplugin-auto-import/vite";
import { VueHooksPlusResolver } from "@vue-hooks-plus/resolvers";

//  配置mock 
import { viteMockServe } from "vite-plugin-mock";
export default defineConfig({
  // 插件列表
  plugins: [
    vue(),
    legacy({
      // 兼容低版本浏览器
      targets: ["chrome 58"],
      additionalLegacyPolyfills: ["regenerator-runtime/runtime"],
    }),
    VueSetupExtend(), // setup 支持name属性
    vueJsx({}), // jsx、tsx支持
    AutoImport({
      imports: ["vue", "vue-router"],
      include: [/\.[tj]sx?$/, /\.vue$/, /\.vue\?vue/, /\.md$/],
      dts: "src/auto-imports.d.ts",
      resolvers: [VueHooksPlusResolver()],
      // 解决eslint报错问题
      eslintrc: {
      	// 这里先设置成true然后npm run dev 运行之后会生成 .eslintrc-auto-import.json 文件之后，在改为false
        enabled: false,
        filepath: './.eslintrc-auto-import.json', // 生成的文件路径
        globalsPropValue: true,
      }
    }),
    viteMockServe({
      mockPath: "./src/mock/",
      logger:false
    })
  ],
  server: {
    host: "0.0.0.0", // 默认是 localhost
    port: 8008, // 自定义端口
    strictPort: false, // 设为 true 时若端口已被占用则会直接退出，而不是尝试下一个可用端口
    open: false, // 启动后是否浏览器自动打开
    hmr: true, // 为开发服务启用热更新，默认是不启用热更新的
    proxy: {
      // 本地开发环境通过代理实现跨域，生产环境使用 nginx 转发
      "/api": {
        target: "http://localhost:8008", // 后端服务实际地址
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
    },
  },
  build: {
    outDir: "dmy_dist", //  打包构建输出路径，默认 dmy_dist ，如果路径存在，构建之前会被删除
    rollupOptions: {
      output: {
        /** S-静态文件按类型分包 */
        chunkFileNames: "static/js/[name]-[hash].js",
        entryFileNames: "static/js/[name]-[hash].js",
        assetFileNames: "static/[ext]/[name]-[hash].[ext]",
        /** E-静态文件按类型分包 */
        manualChunks(id) {
          // 超大静态资源拆分
          if (id.includes("node_modules")) {
            return id
              .toString()
              .split("node_modules/")[1]
              .split("/")[0]
              .toString();
          }
        },
      },
    },
    terserOptions: {
      //打包后移除console和注释
      compress: {
        drop_console: true,
        drop_debugger: true,
      },
    },
  },
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: ['@import "./src/styles/variables.scss";'], // 配置全局公共样式，可多个
        charset: false,
      },
    },
  },
  resolve: {
    // 配置别名
    alias: [{ find: "@", replacement: resolve(__dirname, "src") }],
  },
});
